const redis = require('redis');
const config = require('@/config/config.default'); // 引入 Redis 配置

// 创建 Redis 客户端
const client = redis.createClient({
  host: config.REDIS_HOST,
  port: config.REDIS_PORT,
  password: config.REDIS_PASSWORD,
});

// 监听 Redis 错误事件
client.on('error', (err) => {
  console.error('Redis 错误:', err);
});

// 封装 Redis 的 get 方法
async function get(key) {
  return new Promise((resolve, reject) => {
    client.get(key, (err, value) => {
      if (err) {
        reject(err);
      } else {
        resolve(value);
      }
    });
  });
}

// 封装 Redis 的 set 方法
async function set(key, value, ttl = null) {
  return new Promise((resolve, reject) => {
    if (ttl) { // 如果有设置过期时间
      client.setex(key, ttl, value, (err, reply) => {
        if (err) {
          reject(err);
        } else {
          resolve(reply);
        }
      });
    } else {
      client.set(key, value, (err, reply) => {
        if (err) {
          reject(err);
        } else {
          resolve(reply);
        }
      });
    }
  });
}

// 封装 Redis 的 incr 方法
async function incr(key) {
  return new Promise((resolve, reject) => {
    client.incr(key, (err, value) => {
      if (err) {
        reject(err);
      } else {
        resolve(value);
      }
    });
  });
}

// 封装 Redis 的 del 方法
async function del(key) {
  return new Promise((resolve, reject) => {
    client.del(key, (err, value) => {
      if (err) {
        reject(err);
      } else {
        resolve(value);
      }
    });
  });
}

// 封装 Redis 的 keys 方法
async function keys(pattern) {
  return new Promise((resolve, reject) => {
    client.keys(pattern, (err, keys) => {
      if (err) {
        reject(err);
      } else {
        resolve(keys);
      }
    });
  });
}

module.exports = {
  get,
  set,
  incr,
  del,
  keys,
};